import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

/**
 * 挑选规则：给定一个股票集合stocks,股票编号为1,2,3...,N。挑选规则：
1. 从左往右，第一个开始，每隔一个就删除一个；比如第一次删除的是1,3,5...
2. 从右往左，最后一个开始，每隔一个就删除一个。
重复1,2步骤，直至列表中只剩一只股票。
输入：股票个数N。
输出：最后剩下的那只股票编号。
示例：输入20，输出6。
 */
public class pickStock {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);       
        int n = scan.nextInt();
        List<Boolean> stocks = new ArrayList<>();
        for (int i = 0; i<n; ++i) {
            stocks.add(true);
        }

        while (true) {
            pickLeft(stocks);
            int last = check(stocks);
            if (last != -1) {
                System.out.println(last+1);
                return;
            }
            pickRight(stocks);
            last = check(stocks);
            if (last != -1) {
                System.out.println(last+1);
                return;
            }
        }
    }
    /**
     * 从左往右遍历，奇数未的股票删除(设置为false)
     */
    private static void pickLeft(List<Boolean> stocks) {
        int count = 0;
        for (int i = 0; i<stocks.size(); ++i) {
            if (stocks.get(i)) {
                count++;
            }
            if (count%2 != 0) {
                stocks.set(i, false);
            }
        }
    }

    private static void pickRight(List<Boolean> stocks) {
        int count = 0;
        for (int i = stocks.size()-1; i>=0; --i) {
            if (stocks.get(i)) {
                count++;
            }
            if (count%2 != 0) {
                stocks.set(i, false);
            }
        }
    }

    /**
     * 判断是否是最后一个,如果是，返回下标，否则返回-1
     */
    private static int check(List<Boolean> stocks) {
        int count = 0, last_index = -1;
        for (int i = 0; i<stocks.size(); ++i) {
            if(stocks.get(i)) {
                count++;
                last_index = i;
            }
            if (count > 1) {
                return -1;
            }
        }
        return last_index;
    }
}